A video encoder compresses video information so that more information can be sent over a given bandwidth or saved in a given file size. The compressed signal or file may be transmitted to a receiver or video decoder that may decode or decompress the signal or file for display to a user. Such video encoder-decoder systems may follow a format or standard. For example, video compression standards include the H.264/MPEG-4 Advanced Video Coding (AVC) standard, the High Efficiency Video Coding (HEVC) standard, and the VP9 standard. Such standards may include basic functional modules such as intra/inter-prediction, transform, quantization, in-loop filtering, and entropy coding. For example, HEVC, the successor to AVC jointly developed by ISO/IEC (International Organization for Standardization/International Electrotechnical Commission) and ITU-T (ITU Telecommunication Standardization Sector) and publicized in 2013 may double the compression ratio as compared to AVC at the same level of visual quality. Forthcoming UHD and 8 k UHD are expected to be largely implemented based on HEVC. Furthermore, lower resolution content currently encoded largely based on AVC are expected to move to HEVC encoding. VP9 is a direct competitor to HEVC.
As discussed, an aspect of video encoding may include inter-prediction, which may include motion estimation. Motion estimation may include determining motion vectors that describe the transformation from one image such as a frame of video to another image such as a subsequent frame of video. In some examples, motion estimation may include block matching based motion estimation such that motion vectors are associated with pixel blocks (or similar portions of pixels such as coding units or the like) of a frame. Such motion vectors may be encoded and provided to a decoder, which may perform motion compensation for video frames based on the decoded motion vectors to generate decoded video frames. Furthermore, such motion vectors may be used locally by a video encoder to perform motion compensation within a local decode loop for the eventual generation and encoding of residuals (e.g., differences between decoded pixel blocks and source pixel blocks), which may also be provided to a decoder.
Further still, such motion estimation techniques may support other applications in addition to encoding and decoding applications. For example, motion estimation techniques, or, more generally, block matching search techniques may be implemented in gesture tracking applications, image stabilization applications, or the like.
In some motion estimation contexts, the size of pixel blocks associated with an individual motion vector may be increasing. For example, in H.264, 16×16 macroblocks may be associated with an individual motion vector and in HEVC and VP9, up to 64×64 coding units may be associated with an individual motion vector. For example, motion estimation may include a search performed for a pixel block of a current frame based on a search area or window of a reference frame or frames. Support of such larger pixel blocks may reduce the number of coded bits as compared to smaller pixel blocks. However, as pixel block sizes increase, such pixel block searching may cause increased computational costs as the complexity in hardware implementations and memory trafficking increase.
It is with respect to these and other considerations that the present improvements have been needed. Such improvements may become critical as the desire to compress high quality video, perform gesture tracking, provide image stabilization, and the like becomes more widespread.